

//////////////////////2024/5/31 该功能弃用
/*主要实现了文件的热点管理,包含每间隔一段时间检查文件是否为热点文件,如果不是则将其压缩并删除原文件以节省磁盘空间*/

#ifndef __HOT_HPP__
#define __HOT_HPP__

#include <unistd.h>
#include "util.hpp"
#include "data.hpp"

namespace cloud
{
    class HotManager
    {
    private:
        std::string _back_dir;
        std::string _pack_dir;
        std::string _pack_suffix;
        time_t _hot_time;
        DataManager *_data;

    public:
        HotManager()
        {
            Config *conf = Config::GetInstance();
            _data = DataManager::GetInstance();
            _back_dir = conf->GetBackDir();
            _pack_dir = conf->GetPackDir();
            _pack_suffix = conf->GetPackFileSuffix();
            _hot_time = conf->GetHotTime();
        }

        bool HotJudge(const std::string &filename) // 热点返回真,非热点返回假
        {
            FileUtil fu(filename);
            time_t last_atime = fu.LastATime();
            time_t cur_time = time(NULL);
            if (cur_time - last_atime > _hot_time)
            {
                return false;
            }
            return true;
        }

        bool RunModule()
        {
            while (true)
            {
                FileUtil scan(_back_dir);
                std::vector<string> file;
                // 遍历备份目录下的文件,相比于直接从哈希表中获取
                // 该做法可以还可以管理直接在服务器上通过cp命令复制进来的文件
                scan.ScanDirectory(&file);
                for (auto &filename : file)
                {
                    if (HotJudge(filename) == true)
                        continue; // 热点文件无须理会
                    BackupInfo info;
                    if(_data->GetOneByRealPath(filename,&info)==false)
                    {
                        info.initByRealPath(filename);//处理非直接上传文件
                    }
                    
                    FileUtil pack(filename);
                    pack.Compress(info._packpath);
                    pack.Remove();//删除原文件
                    info._pack_flag=true;//将压缩标志置为真
                    _data->Update(info);//更新哈希表,及重新持久化存储
                }
                sleep(1);//每次循环休眠一秒,防止占用CPU资源过多
            }
        }
    };

};

#endif //__HOT_HPP__